package com.chen.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chen.mapper.UserMapper;
import com.chen.pojo.User;
import com.chen.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;


@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService  {
    @Resource
    private RedisTemplate<String,Object> redisTemplate;
    /**
     * 用户用户id查询用户信息
     * @param id
     * @return
     */
    @Override
    public User getUserById(Integer id) {
        // 参数快速校验，挡掉明显非法的
        if (id == null || id <= 0) return null;

        // 先看缓存中有没有,有直接返回
        String key="user:" + id;
        Object o= redisTemplate.opsForValue().get(key);
        if (o != null ){
            if("NULL".equals(o)){
                return null;
            }
            return (User) o;
        }
        //缓存没有查询数据库
         User  user = this.getById(id);
         if (user != null){
             //存储到redis一份,返回一份
             redisTemplate.opsForValue().set(key,user,30,TimeUnit.MINUTES);
             return user;
         }


        //数据库查询的null也缓存，设置30秒有效期。
        redisTemplate.opsForValue().set("user:"+id,"NULL",30, TimeUnit.SECONDS);

        // 数据库也没有查到的逻辑, 可以选择抛出自定义异常
        return null;
    }
}
